package com.xxhui.scrolldemo.View;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;

/**
 * Created by hui on 2016/7/23.
 */
public class DrawViewByLayoutMethod2 extends View {

    private static final String TAG = "DrawViewByLayoutMethod2" ;
    private int lastX;
    private int lastY;
    private int viewWidth;
    private int viewHeight;
    private Paint paint;

    public DrawViewByLayoutMethod2(Context context) {
        super(context);
        initRes();
    }

    public DrawViewByLayoutMethod2(Context context, AttributeSet attrs) {
        super(context, attrs);
        initRes();
    }

    public void initRes(){
        // 给View设置背景颜色，便于观察
        setBackgroundColor(Color.RED);
        paint = new Paint();
        paint.setStyle(Paint.Style.STROKE);
        paint.setColor(Color.BLACK);
        paint.setTextSize(20);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        int x = (int) event.getRawX();//获取以屏幕左上角为参考系的x坐标
        int y = (int) event.getRawY();//获取以屏幕左上角为参考系的y坐标
        switch (event.getAction()){
            case MotionEvent.ACTION_DOWN:
                // 记录触摸点坐标
                lastX = x;
                lastY = y;
                Log.i(TAG, "onTouchEvent: down");
                break;
            case MotionEvent.ACTION_MOVE:
                int offsetX = x - lastX;
                int offsetY = y - lastY;
                //这种获取屏幕的绝对坐标的，我们可以看到坐标太大时，offsetX、offsetY实际重绘已经不在当前触摸的位置，因为offset值太大
                //此时我们已经不能控制，因为产生移动事件时，数值一直在变，一直增大，或一直减小，
                //说个例子，当offsetX为正数，就是我们向右拖动了，此时产生了很多个移动事件，每次layout的offsetX都差不多，当第一次layout，是在触摸点的
                //但是产生很多个触摸事件，第二次这时getLeft加上offsetX，第二次，还是getleft(等于上次的getleft+o上次的ffsetX)+offsetX，实际上就是每次layout都在第一次的基础上，加offset的值
                //这样就出了本View 的范围了

                //每次记录的话，就不会这样子，即便每次layout还是在本View的范围内，每次的offset值都不会修正，不会由于位置改变的offset太大而影响，主要是参考系不同才这样子！
                layout(getLeft()+offsetX,//getLeft方法获取相对于父控件的位置
                        getTop()+offsetY,
                        getRight()+offsetX,
                        getBottom()+offsetY);
                Log.i(TAG, "onTouchEvent: x:"+x+" y:"+y+ " lastX:"+lastX+" lastY:"+lastY);
                //重新设置初始坐标
                lastX = x ;
                lastY = y ;

                break;
            case MotionEvent.ACTION_UP:
                layout(0,getTop(),getRight()-getLeft(),getBottom());
                break;
            default:
                break;
        }
        return true;
    }

    @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        super.onSizeChanged(w, h, oldw, oldh);
        viewWidth = w;
        viewHeight = h;
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        //canvas.translate(viewWidth,viewHeight);
        canvas.drawText("Layout2()",5,viewHeight/2,paint);
    }
}
